package com.hsnn.medstgmini.sys.service.impl;

import java.sql.Blob;
import java.sql.Timestamp;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.pro.project.model.BidProject;
import com.hsnn.medstgmini.sys.dao.SysNoticeDao;
import com.hsnn.medstgmini.sys.model.BidProjNotice;
import com.hsnn.medstgmini.sys.model.BidProjNoticeLog;
import com.hsnn.medstgmini.sys.model.SysNotice;
import com.hsnn.medstgmini.sys.model.SysNoticeLog;
import com.hsnn.medstgmini.sys.service.SysNoticeManager;
import com.hsnn.medstgmini.util.DateUtil;
import com.hsnn.medstgmini.util.Pagination;

@Service
public class SysNoticeManagerImpl implements SysNoticeManager{
    
	@Autowired
	private SysNoticeDao sysNoticeDao;
	
	/**
	 * @category 获取系统公告列表
	 * @date 2015年8月20日15:44:13
	 * @author zhouqi
	 * @param Pagination
	 * @return Pagination
	 */
	@Override
	public Pagination getSysNoticeList(Pagination page) {
		return sysNoticeDao.getSysNoticeList(page);
	}
    
	/**
	 * @category 根据公告id查询公告
	 * @date 2015年8月20日15:44:13
	 * @author zhouqi
	 * @param String id
	 * @return SysNotice
	 */
	@Override
	public SysNotice getSysNoticeById(String sysNoticeId) {
		SysNotice sysNotice = null;
		try {
			sysNotice = sysNoticeDao.getSysNoticeById(sysNoticeId);
			Blob blob = sysNotice.getBlobContent();
			String content = "";
			if(null!=blob){
				content = new String(blob.getBytes((long)1, (int)blob.length()),"utf-8");
				content = content.replaceAll("\"", "'");//主要为了解决前台多加引号问题
				content = content.replaceAll("\\r","").replaceAll("\\n", "");
				sysNotice.setContent(content);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sysNotice;
	}
    
	/**
	 * @category 根据公告id查询公告日志
	 * @date 2015年8月20日15:44:13
	 * @author zhouqi
	 * @param String id
	 * @return SysNoticeLog
	 */
	@Override
	public SysNoticeLog getSysNoticeLogById(String sysNoticeLogId) {
		return sysNoticeDao.getSysNoticeLogById(sysNoticeLogId);
	}
	
	/**
	 * @category 保存公告
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNotice sysNotice
	 * @return SysNoticeLog
	 */
	@Override
	public void saveSysNotice(SysNotice sysNotice) {
		sysNoticeDao.saveSysNotice(sysNotice);
	}

	/**
	 * @category 保存公告日志
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNoticeLog sysNoticLog
	 * @return SysNoticeLog
	 */
	@Override
	public void saveSysNoticeLog(SysNoticeLog sysNoticLog) {
		sysNoticeDao.saveSysNoticeLog(sysNoticLog);
	}
	
	/**
	 * @category 更新公告
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNotice sysNotice
	 * @return SysNoticeLog
	 */
	@Override
	public void updateSysNotice(SysNotice sysNotice) {
		sysNoticeDao.updateSysNotice(sysNotice);
	}

	/**
	 * @category 更新公告日志
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNoticeLog sysNoticLog
	 * @return SysNoticeLog
	 */
	@Override
	public void updateSysNoticeLog(SysNoticeLog sysNoticLog) {
		sysNoticeDao.updateSysNoticeLog(sysNoticLog);
	}
	
	/**
	 * @category 保存公告日志列表
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNoticeLog sysNoticLog
	 * @return SysNoticeLog
	 */
	@Override
	public Pagination getSysNoticeLogList(Pagination page) {
		return sysNoticeDao.getSysNoticeLogList(page);
	}
	/**
	 * @category 写日志
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNotice sysNotice
	 * @return boolean
	 */
	public boolean writeLog(SysNotice sysNotice){
		try{
			SysNoticeLog sysNoticeLog = new SysNoticeLog();
			BeanUtils.copyProperties(sysNotice, sysNoticeLog);
			sysNoticeLog.setLogId(UUID.randomUUID().toString());
			saveSysNoticeLog(sysNoticeLog);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
		return true;
	}
	/**
	 * @category 获取前后对比状态
	 * @date 2015年8月24日20:51:35
	 * @author zhouqi
	 * @param String sysNoticeId
	 * @return List<SysNoticeLog>
	 */
	@Override
	public List<SysNoticeLog> getCompareLog(String sysNoticeId,String dateTime){
		Timestamp time = DateUtil.StringTime2Timestamp(dateTime);
		List<SysNoticeLog> list = sysNoticeDao.getCompareLog(sysNoticeId,time);
		for(int i = 0; i < list.size(); i++){
			SysNoticeLog sysNoticeLog = list.get(i);
			Blob blob = sysNoticeLog.getBlobContent();
			String content = "";
			try {
				if(null!=blob){
					content = new String(blob.getBytes((long)1, (int)blob.length()));
					content = content.replaceAll("\"", "'");
					content = content.replaceAll("\\r","").replaceAll("\\n", "");
					sysNoticeLog.setContent(content);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return list;
	}
	/**
	 * @category 获取项目列表（查询用）
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNoticeLog sysNoticLog
	 * @return SysNoticeLog
	 */
	@Override
	public List<BidProject> getProjectList(){
		return sysNoticeDao.getProjectList();
	}
	
	 /**
	 * @category 保存或者更新项目公告关系
	 * @date 2015年8月21日08:31:45
	 * @author zhouqi
	 * @param SysNoticeLog sysNoticLog
	 * @return SysNoticeLog
	 */
	    @Override
		public void saveOrUpdBidProjNotice(BidProjNotice bidProjNotice){
			sysNoticeDao.saveOrUpdBidProjNotice(bidProjNotice);
		}
		
		/**
		 * @category 获取项目公告关系
		 * @date 2015年8月21日08:31:45
		 * @author zhouqi
		 * @param SysNoticeLog sysNoticLog
		 * @return SysNoticeLog
		 */
	    @Override
		public BidProjNotice getBidProjNoticeById(String sysNoticeId){
			return sysNoticeDao.getBidProjNoticeById(sysNoticeId);
		}
		
		/**
		 * @category 写日志
		 * @date 2015年8月21日08:31:45
		 * @author zhouqi
		 * @param BidProjNoticeLog bidProjNoticeLog
		 * @return void
		 */
	    @Override
		public void writeLogOfProjNotice(BidProjNotice bidProjNotice){
			BidProjNoticeLog bidProjNoticeLog = new BidProjNoticeLog();
			BeanUtils.copyProperties(bidProjNotice, bidProjNoticeLog);
			bidProjNoticeLog.setLogId(UUID.randomUUID().toString());
			sysNoticeDao.saveBidProjNoticeLog(bidProjNoticeLog);
		}
	    
		/**
		 * @category 根据公告id查询公告
		 * @date 2015年8月20日15:44:13
		 * @author zhouqi
		 * @param String id
		 * @return SysNotice
		 */
	    @Override
		public List<SysNotice> getSysNoticeByTitle(String sysNoticeTitle){
			return sysNoticeDao.getSysNoticeByTitle(sysNoticeTitle);
		}
	    

		/**
		 * @category 获取首页系统公告列表
		 * @author 韩守松
		 * @date   2015年11月16日
		 * @param  @param page
		 * @param  @return
		 */
	    public List<SysNotice> getHomeSysNoticeList(Pagination page){
	    	return sysNoticeDao.getHomeSysNoticeList(page);
		}
		
}
